<script>

import { objectAssign, formatDate } from "../../utils/common";
import { server_request } from "../../utils/request";
import ServerUpload from "./ServerUpload";
import uploadConfig from "../../config/upload";
import cosUpload from "../../utils/upload/cos";

/**
 *
    文件上传 - 腾讯云cos
    使用前，请确保 public目录下，引用了腾讯云COS SDK。
    腾讯云COS SDK 安装下载地址：
    https://cloud.tencent.com/document/product/436/11459

    cos要配置跨域，配置方式见下方文档
    https://cloud.tencent.com/document/product/436/11488

 * 
 */
export default {
    extends: ServerUpload,
    name: "PopoCosUpload",
    data(){
        return {
            sts: null,
            stsLoaded: false,
        };
    },
    created(){
        this.opt.action = "";
        this.opt.httpRequest = this.httpRequest;
        this.sts = this.item.sts;
    },
    methods: {
        /**
         * 上传OSS请求
         * 
         * @param  {[type]} http [description]
         * @return {[type]}      [description]
         */
        httpRequest( http){
            /*
            http: {
                action: ""
                data: undefined
                file: File {uid: 1595394989063, name: "123.jpg", webkitRelativePath: "", …}
                filename: "file"
                headers: {__ob__: Observer}
                onError: ƒ onError(err)
                onProgress: ƒ onProgress(e)
                onSuccess: ƒ onSuccess(res)
                withCredentials: false
            }                
             */
            cosUpload( 
                http.file, 
                {
                    sts: this.sts,
                    fileOnlinePath: this.getRandomFileInfo( http.file).final,
                    progress: (e)=>{
                        http.onProgress( { percent: e.percent});
                    },
                    success: (e)=>{
                        http.onSuccess(e)
                    },
                    failure: (e)=>{
                        console.error( "上传失败", e);
                        http.onError( "上传失败");
                    }
                }
            );
            
            // // console.log( "httpRequest", arguments);
            // var cos_config = objectAssign( {}, uploadConfig.cos.upload_config);

            // /*
            //     优先使用stsToken的方式进行鉴权，可支持在 item.sts 中传入已有的数据，也可以
            //     通过 upload.js 中的 uploadConfig.cos.get_sts_token_url 的配置，通过
            //     ajax来获得 stsToken。 
            //     如果都没有，则使用最不安全的 secretId/secretKey 的直传模式。
            //  */
            // if( this.sts){
            //     // 使用 sts方式进行oss鉴权。
            //     cos_config = this.item.sts.credentials;

            //     this.doUpload( {
            //         getAuthorization: ( options, callback) => {
            //             callback( cos_config);
            //         }
            //     }, http);

            // }else if( !!uploadConfig.cos.get_sts_token_url && !this.stsLoaded){

            //     // 获得ajax方式获得 sts 数据
            //     server_request( uploadConfig.cos.get_sts_token_url).then( (res) => {
            //         // 防止反复调用 sts 接口
            //         this.stsLoaded = true;
            //         if( res.code == 200){
            //             this.sts = res.data;
            //             this.httpRequest( http);
            //         }else{
            //             this.$message.error( "获取cos临时凭证失败");
            //         }
            //     });

            // }else{
            //     this.doUpload( cos_config, http);
            // }

        },
        // doUpload( cos_config, http){
        //     // console.log( "cos_config", cos_config);

        //     let client = new COS( cos_config);

        //     try{
        //         let tempCheckpoint = null;
        //         let fileInfo = this.getRandomFileInfo( http.file);
        //         let fileFinalPath = fileInfo.final;

        //         let key = fileFinalPath;

        //         client.sliceUploadFile( 
        //             {
        //                 Bucket: uploadConfig.cos.bucket,
        //                 Region: uploadConfig.cos.region,
        //                 Key: key,
        //                 Body: http.file,
        //                 onProgress: ( progress)=>{
        //                     http.onProgress( { percent: Math.floor( progress.percent * 100)});
        //                 }
        //             },
        //             (err, data) =>{
        //                 if( data == null){
        //                     http.onError( "上传失败");
        //                     console.error( "cos upload fail", err);
        //                 }else{

        //                     var loc = data.Location;
        //                     if( loc.indexOf( "://") == -1){
        //                         loc = "http" + ( uploadConfig.cos.secure ? "s" : "") + "://" + loc;
        //                     }

        //                     http.onSuccess( {
        //                         code: 200,
        //                         msg: "success",
        //                         data: loc, 
        //                     });
        //                 }
        //                 // console.log( "finish", err, data);
        //             }
        //         );

        //     }catch( e){
        //         http.onError( "上传失败");
        //         // client.cancel();
        //         console.error( e);
        //     }
        // },
    }
};
</script>

